package cn.cy.util;
import java.util.Arrays;

import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

/**
 * 日志增强
 * @author Administrator
 *
 */
public class AroundLogger {
	
	private static final Logger log = Logger.getLogger(AroundLogger.class);
	
	public Object aroundLogger(ProceedingJoinPoint jp) throws Throwable{
		log.info("调用"+jp.getTarget()+"的"+jp.getSignature().
				getName()+"方法。方法入参"+Arrays.toString(jp.getArgs()));
		try {
			Object result = jp.proceed();
			log.info("调用 "+jp.getTarget()+"的"+jp.getSignature().
					getName()+"方法\n方法返回值"+result);
			return result;
		} catch (Throwable ex) {
			log.info(jp.getSignature().getName()+"方法发生异常："+ex);
			throw ex;
		} finally {
			log.info(jp.getSignature().getName()+"方法执行结束");
		}
	}
	
	
	
	
	
	//调用
	public void before(JoinPoint jp){
		log.info("调用 "+jp.getTarget()+"的"+jp.getSignature().getName()+"方法，方法入参"+Arrays.toString(jp.getArgs()));
	}
	
	//返回值
	public void afterReturning(JoinPoint jp,Object ob){
		log.info("调用 "+jp.getTarget()+"的"+jp.getSignature().getName()+"方法，方法返回值"+ob);
	}
	
	//异常
	public void afterThrowing(JoinPoint jp,RuntimeException ex){
		log.error(jp.getSignature().getName()+"方法异常："+ex);
	}
	
	public void afterLogger(JoinPoint jp){
		log.error(jp.getSignature().getName()+"方法执行结束。");
	}
	
}
